﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using SSPharma.Biz.DanhMuc;
using SSPharma.Common;
using System.Data;
using SSPharma.View.TimKiem;

namespace SSPharma.View.DanhMuc
{
    /// <summary>
    /// Interaction logic for frmMenu.xaml
    /// </summary>
    public partial class frmMenu : Window
    {
       
        #region valible
        //dataset dung de luu  dữ liệu xuống database
        private DataSet dsData;
        // enum dùng để lưu trữ trạng thái mode form
        private UtilityUIElement.FormMode isMode;
        private UtilityUIElement.FormMode isModeLine;
        // khai báo đối tượng BizDanhMucMenu
        private BizDanhMucMenu _BizDanhMucMenu;
        //datarow dùng để lấy dữ liệu và gán dữ liệu
        private DataRow drHeader;
        private DataRow drForm;
        // lấy controll đang được chọn hiện tại
        private string controlName;
        //// add a delegate
        public delegate void IdentityValues();
        //// add an event of the delegate type
        public event IdentityValues IdentityValue;
        #endregion

        #region contructor
        /// <summary>
        /// contructor tham số chuyền vào là mã Menu
        /// </summary>
        /// <param name="Id"></param>
        public frmMenu(string Id)
        {
            InitializeComponent();
            _BizDanhMucMenu = new BizDanhMucMenu();
            try
            {
                this.BeginMode();
                this.EditMode();
                GetDataMenuTheoMa(Id);
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        /// <summary>
        /// User:TAMNN 21/07/2014
        /// Contructor mac dinh
        /// </summary>
        public frmMenu()
        {
            InitializeComponent();
            _BizDanhMucMenu = new BizDanhMucMenu();
             
            try
            {
                this.BeginMode();
                this.NewMode();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        #endregion

        #region Các Hàm Mode form
        /// <summary>
        /// User:TAMNN ; 18/07/2014
        /// Mục đích: chạy khi bắt đầu vào form
        /// </summary>
        private void BeginMode()
        {
            this.EnableControl(false);
            this.GetCauTrucData();
        }
        /// <summary>
        /// User:TAMNN ; 18/07/2014
        /// Mục đích: chạy khi có mã chứng từ
        /// </summary>
        private void EditMode()
        {
            isMode = UtilityUIElement.FormMode.EditMode;
            this.EnableControl(true);
            this.txtTenMenu.Focus();
        }
        /// <summary>
        /// User:TAMNN ; 18/07/2014
        /// Mục đích: thêm mới form
        /// </summary>
        private void NewMode()
        {
            this.ResetTemp();
            this.isMode = UtilityUIElement.FormMode.NewMode;
            this.isModeLine = UtilityUIElement.FormMode.NewMode;
            this.EnableControl(true);
            this.dsData.Tables["dt_Menu"].Rows.Clear();
            this.dsData.Tables["dt_Form"].Rows.Clear();
            this.dsData.AcceptChanges();
            this.drHeader = this.dsData.Tables["dt_Menu"].NewRow();
            this.drForm = this.dsData.Tables["dt_Form"].NewRow();
            this.dsData.Tables["dt_Menu"].Rows.Add(drHeader);
            this.dsData.Tables["dt_Form"].Rows.Add(drForm);
            this.GetCounter();
            this.SetDefaulControl();
            this.txtMaMenu.Focus();
        }
        /// <summary>
        ///  User:TAMNN ; 18/07/2014
        ///  Mục đích: save xong dữ liệu thì gọi để đổ lại dữ liệu cho các controll
        /// </summary>
        private void SaveMode()
        {
            isMode = UtilityUIElement.FormMode.EditMode;
            this.EnableControl(true);
            this.txtTenMenu.Focus();
            DataTable Menu = _BizDanhMucMenu.ft_GetDataMenuTheoMa(txtMaMenu.Text);// lấy dữ liệu theo mã
            Menu.TableName = "dt_Menu";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_Menu"]);
            this.dsData.Tables.Add(Menu);
            drHeader = dsData.Tables["dt_Menu"].Rows[0];
            UtilityUIElement.ElementToControl(drHeader,"Menu", this.LayoutRoot.Children);
            DataTable Form = _BizDanhMucMenu.ft_GetDataFormTheoMa(txtMaMenu.Text);// lấy dữ liệu theo mã
            if (Form.Rows.Count > 0)
            {
                Form.TableName = "dt_Form";
                this.dsData.Tables.Remove(this.dsData.Tables["dt_Form"]);
                this.dsData.Tables.Add(Form);
                drForm = dsData.Tables["dt_Form"].Rows[0];
                UtilityUIElement.ElementToControl(drForm, "Form", this.LayoutRoot1.Children);
                isModeLine = UtilityUIElement.FormMode.EditMode;
                chkIsForm.IsChecked = true;
                EnableControl(true);
            }
            else
            {
                this.isModeLine = UtilityUIElement.FormMode.NewMode;
                this.drForm = this.dsData.Tables["dt_Form"].NewRow();
                this.dsData.Tables["dt_Form"].Rows.Add(drForm);
            }

        }
        #endregion

        #region Event
        /// <summary>
        /// User:TAMNN; 18/07/2014
        /// Cập nhật dữ liệu
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCapNhat_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            try
            {
                bool p_bResult = false;
                string Message = string.Empty;
                this.CheckDataBeforeSave(ref Message, ref p_bResult);
                if (!string.IsNullOrEmpty(Message))
                {
                    MessageBox.Show(Message, "SSPharma");
                    return;
                }
                this.GetDataBeforeSave();//lấy dữ liệu trước khi lưu
                if (isMode == UtilityUIElement.FormMode.NewMode)//Nếu là thêm mới
                {
                    if (p_bResult)// nếu như mã đó đã có
                    {
                        if (MessageBox.Show("Mã Menu đã tồn tại.\n Bạn có muốn chương trình sẽ tự động tăng mã tiếp theo không ?", "SSPharma", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
                        {
                            _BizDanhMucMenu.fg_InsertMenu(dsData, UtilityUIElement.Counter.M.ToString(),chkIsForm.IsChecked??false);
                            MessageBox.Show("Thêm thành công!");
                        }
                    }
                    else//ngược lại tạo mã Menu rồi lưu dữ liệu bình thường
                    {
                        _BizDanhMucMenu.fg_InsertMenu(dsData, UtilityUIElement.Counter.M.ToString(),chkIsForm.IsChecked??false);
                        MessageBox.Show("Thêm thành công!");
                    }
                }
                else// ngược lại là cập nhật dữ liệu
                {
                    _BizDanhMucMenu.fg_UpdateMenu(dsData);
                    MessageBox.Show("Cập nhật thành công!");
                }
                this.SaveMode();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        /// <summary>
        /// User:TAMNN; 18/07/2014
        /// Nút thoát form
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnThoat_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            try
            {
                this.IdentityValue();
                this.Close();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        /// <summary>
        /// User: TAMNN; 18/07/2014
        /// Thoát form
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Window_Closed(object sender, System.EventArgs e)
        {
            try
            {
                this.IdentityValue();
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
        private void chkIsForm_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            if (chkIsForm.IsChecked == false)
            {
                txtTenForm.IsEnabled = false;
                txtDirectoryViewModel.IsEnabled = false;
                txtViewModel.IsEnabled = false;
                txtDirectoryViews.IsEnabled = false;
                txtViews.IsEnabled = false;
                tx1GhiChu.IsEnabled = false;
            }
            else 
            {
                txtTenForm.IsEnabled = true;
                txtDirectoryViewModel.IsEnabled = true;
                txtViewModel.IsEnabled = true;
                txtDirectoryViews.IsEnabled = true;
                txtViews.IsEnabled = true;
                tx1GhiChu.IsEnabled = true;
            }
        }
        /// <summary>
        /// sự kiện bàn phím cho form hiện tại
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == Key.F5)
            {
                string p_sStoreName = string.Empty, p_sParams = string.Empty, p_sValues = string.Empty;
                var focusedControl = FocusManager.GetFocusedElement(this);
                Control control = (Control)focusedControl;
                controlName = control.Name;
                if (controlName.Equals("txtMaMenuCha"))
                {
                    LibraryFunctionFind.StringTimKiemMenu(ref p_sStoreName, ref p_sParams, ref p_sValues);
                    FunctionShowForm(p_sStoreName, p_sParams, p_sValues);
                }
            }
        }
        #endregion

        #region Utility function
        /// <summary>
        /// User: TAMNN; 18/07/2014
        /// lấy mã Menu
        /// </summary>
        public void GetCounter()
        {
            string counter = this._BizDanhMucMenu.fs_LayCongToTuDong(UtilityUIElement.Counter.M.ToString());
            if (!string.IsNullOrEmpty(counter))
            {
                txtMaMenu.Text = counter;
            }
            else
                throw new System.Configuration.Provider.ProviderException("Không lấy được Mã Menu");
        }
        /// <summary>
        /// User: TAMNN; 18/07/2014
        /// lấy cấu trúc table trong sql để thực hiện thêm, xóa, sửa dữ liệu
        /// </summary>
        private void GetCauTrucData()
        {
            dsData = _BizDanhMucMenu.fs_LayCauTrucTable();
        }
        /// <summary>
        /// User: TAMNN; 18/07/2014
        /// lấy dữ liệu trước khi lưu
        /// </summary>
        private void GetDataBeforeSave()
        {
            UtilityUIElement.ControlToElement(ref this.drHeader, "Menu", this.LayoutRoot.Children);
            drHeader["MaMenuCha"] = !string.IsNullOrEmpty(txtMaMenuCha.Text)?txtMaMenuCha.Text:"";
            drHeader["ModifiedDate"] = LibraryFormatConverter.ConvertStringDDMMYYYYToYYYYMMDD(LibraryFormatConverter.SetStringDateDefault);
            drHeader["ModifiedBy"] = Global.UserName;
            if (this.isMode == UtilityUIElement.FormMode.NewMode)
            {
                drHeader["CreatedDate"] = LibraryFormatConverter.ConvertStringDDMMYYYYToYYYYMMDD(LibraryFormatConverter.SetStringDateDefault);
                drHeader["CreatedBy"] = Global.UserName;
                this.dsData.Tables["dt_Menu"].Rows[0].AcceptChanges();// chuyển trạng thái về Unchange
                this.dsData.Tables["dt_Menu"].Rows[0].SetAdded();// set lai trang thai la Added
                
            }
            //Form
            if (chkIsForm.IsChecked == true)
            {
                UtilityUIElement.ControlToElement(ref this.drForm, "Form", this.LayoutRoot1.Children);
                drForm["ModifiedDate"] = LibraryFormatConverter.ConvertStringDDMMYYYYToYYYYMMDD(LibraryFormatConverter.SetStringDateDefault);
                drForm["ModifiedBy"] = Global.UserName;
                drForm["MaMenu"] = txtMaMenu.Text;
                drForm["TenMenu"] = txtTenMenu.Text;
                drForm["TinhTrang"] = chkTinhTrang.IsChecked;
                if (this.isModeLine == UtilityUIElement.FormMode.NewMode)
                {
                    drForm["CreatedDate"] = LibraryFormatConverter.ConvertStringDDMMYYYYToYYYYMMDD(LibraryFormatConverter.SetStringDateDefault);
                    drForm["CreatedBy"] = Global.UserName;
                    this.dsData.Tables["dt_Form"].Rows[0].AcceptChanges();// chuyển trạng thái về Unchange
                    this.dsData.Tables["dt_Form"].Rows[0].SetAdded();// set lai trang thai la Added
                }
            }
            else if (this.isModeLine == UtilityUIElement.FormMode.EditMode)
            {
                this.dsData.Tables["dt_Form"].Rows[0].Delete();
            }
            else
                this.dsData.Tables["dt_Form"].Rows[0].AcceptChanges();
        }
        /// <summary>
        /// User: TAMNN; 18/07/2014
        /// Lấy Menu theo mã Menu
        /// </summary>
        /// <param name="strMa"></param>
        private void GetDataMenuTheoMa(string strMa)
        {
            DataTable TableData = _BizDanhMucMenu.ft_GetDataMenuTheoMa(strMa);// lấy dữ liệu theo mã
            TableData.TableName = "dt_Menu";
            this.dsData.Tables.Remove(this.dsData.Tables["dt_Menu"]);
            this.dsData.Tables.Add(TableData);
            drHeader = dsData.Tables["dt_Menu"].Rows[0];
            UtilityUIElement.ElementToControl(drHeader,"Menu", this.LayoutRoot.Children);
            //form
            DataTable Form = _BizDanhMucMenu.ft_GetDataFormTheoMa(txtMaMenu.Text);// lấy dữ liệu theo mã
            if (Form.Rows.Count > 0)
            {
                Form.TableName = "dt_Form";
                this.dsData.Tables.Remove(this.dsData.Tables["dt_Form"]);
                this.dsData.Tables.Add(Form);
                drForm = dsData.Tables["dt_Form"].Rows[0];
                UtilityUIElement.ElementToControl(drForm, "Form", this.LayoutRoot1.Children);
                chkIsForm.IsChecked = true;
                EnableControl(true);
                this.isModeLine = UtilityUIElement.FormMode.EditMode;
            }
            else
            {
                this.isModeLine = UtilityUIElement.FormMode.NewMode;
                this.drForm = this.dsData.Tables["dt_Form"].NewRow();
                this.dsData.Tables["dt_Form"].Rows.Add(drForm);
            }
        }
        /// <summary>
        /// User: TAMNN; 18/07/2014
        /// xóa toàn bộ dữ liệu trên các controll
        /// </summary>
        private void ResetTemp()
        {
            UtilityUIElement.BlankControlText(this.LayoutRoot.Children);
            UtilityUIElement.BlankControlText(this.LayoutRoot1.Children);
        }
        /// <summary>
        /// User: TAMNN; 18/07/2014
        /// kiểm tra các cột bắt buộc và các cột tính toán đúng hay sai.
        /// </summary>
        /// <returns></returns>
        private void CheckDataBeforeSave(ref string Message, ref bool p_bResult)
        {
            if (string.IsNullOrEmpty(txtMaMenu.Text))
            {
                Message = Message + "Nhập mã Menu" + "\n";
            }
            if (string.IsNullOrEmpty(txtTenMenu.Text))
            {
                Message = Message + "Nhập tên Menu" + "\n";
            }
            if (chkIsForm.IsChecked == true)
            {
                if (string.IsNullOrEmpty(txtTenForm.Text))
                {
                    Message = Message + "Nhập FormId" + "\n";
                }
                if (string.IsNullOrEmpty(txtDirectoryViewModel.Text))
                {
                    Message = Message + "Nhập tên thư mục model" + "\n";
                }
                if (string.IsNullOrEmpty(txtViewModel.Text))
                {
                    Message = Message + "Nhập tên model" + "\n";
                }
                if (string.IsNullOrEmpty(txtDirectoryViews.Text))
                {
                    Message = Message + "Nhập tên thư mục view" + "\n";
                } 
                if (string.IsNullOrEmpty(txtViews.Text))
                {
                    Message = Message + "Nhập tên view" + "\n";
                }
            }
            if (isMode == UtilityUIElement.FormMode.NewMode)
                // kiểm tra xem code id đó đã được lưu hay chưa
                p_bResult = _BizDanhMucMenu.fb_KiemTraSoCounter(txtMaMenu.Text, UtilityUIElement.Counter.M.ToString());
        }
        /// <summary>
        /// User: TAMNN; 18/07/2014
        /// ẩn hiện controll
        /// </summary>
        /// <param name="isEnable"></param>
        private void EnableControl(bool isEnable)
        {
            UtilityUIElement.Enable_Control(isEnable, this.LayoutRoot.Children);
            UtilityUIElement.Enable_Control(isEnable, this.LayoutRoot1.Children);
            txtMaMenu.IsEnabled = false;
            if (chkIsForm.IsChecked == false)
            {
                txtTenForm.IsEnabled = false;
                txtDirectoryViewModel.IsEnabled = false;
                txtViewModel.IsEnabled = false;
                txtDirectoryViews.IsEnabled = false;
                txtViews.IsEnabled = false;
                tx1GhiChu.IsEnabled = false;
            }
        }
        /// <summary>
        /// User: TAMNN; 18/07/2014
        /// gán các giá trị mặc định cho các controll
        /// </summary>
        private void SetDefaulControl()
        {
            chkTinhTrang.IsChecked = true;
        }
        #region Hàm dùng cho tìm kiếm form
        private void FunctionShowForm(string p_sStoreName, string p_sParams, string p_sValues)
        {
            var formKeySearch = new frmTimKiem(p_sStoreName, p_sParams, p_sValues);
            formKeySearch.IdentityValue += new frmTimKiem.IdentityValues(Search_Form);
            formKeySearch.ShowDialog();
        }
        /// <summary>
        /// User: TAMNN 11/08/2014
        /// Mục đích: lấy dữ liệu trả về của form search
        /// </summary>
        /// <param name="keyReturn"></param>
        private void Search_Form(string keyReturn)
        {
            string str = keyReturn;
            switch (controlName)
            {
                case "txtMaMenuCha":
                    txtMaMenuCha.Text = str;
                    txtTenMenuCha.Text = _BizDanhMucMenu.ft_GetTenMenuTheoMa(str);// lấy dữ liệu theo mã
                    break;
            }
        }
        #endregion

        #endregion

        #region Tính toán
        
        #endregion

    }
}
